home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / docs / ippon / zmdplay / zmdplay.c < prev    next >
C/C++ Source or Header  |  2000-07-07  |  2KB  |  107 lines

  1. /* zmdplay.c */
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <sys/iocs.h>
  5.  
  6. #include "zmcall.h"
  7.  
  8.  
  9.  
  10. void usage (void)
  11. {
  12.     printf (
  13.                ".ZMD ファイルを演奏するテスト zmdplay.x ver0.01\n"
  14.                "        programmed by Mitsuky <FreeSoftware>\n"
  15.                "PT034MK.ZMD を読み込んで演奏し、AXE0004.PCM を再生します\n"
  16.         );
  17. }
  18.  
  19.  
  20.  
  21. int main (int argc, char *argv[])
  22. {
  23.     FILE *fp;
  24.     void *zmd_file, *pcm_file;
  25.     int zmd_size, pcm_size;
  26.  
  27.     if (argc > 1) {
  28.         usage ();
  29.         return (-1);
  30.     }
  31.     /* PT034MK.ZMD をメモリに読み込む */
  32.     fp = fopen ("PT034MK.ZMD", "rb");
  33.     if (fp == NULL) {
  34.         printf ("PT034MK.ZMD が読み込めません\n");
  35.         return (-1);
  36.     }
  37.     fseek (fp, 0, SEEK_END);
  38.     zmd_size = ftell (fp);
  39.     fseek (fp, 0, SEEK_SET);
  40.     zmd_file = malloc (zmd_size);
  41.     if (zmd_file == NULL) {
  42.         printf ("メモリが足りません\n");
  43.         return (-1);
  44.     }
  45.     fread (zmd_file, sizeof (char), zmd_size, fp);
  46.     fclose (fp);
  47.  
  48.     /* AXE0004.PCM をメモリに読み込む */
  49.     fp = fopen ("AXE0004.PCM", "rb");
  50.     if (fp == NULL) {
  51.         printf ("AXE0004.PCM が読み込めません\n");
  52.         return (-1);
  53.     }
  54.     fseek (fp, 0, SEEK_END);
  55.     pcm_size = ftell (fp);
  56.     fseek (fp, 0, SEEK_SET);
  57.     pcm_file = malloc (pcm_size);
  58.     if (pcm_file == NULL) {
  59.         printf ("メモリが足りません\n");
  60.         return (-1);
  61.     }
  62.     fread (pcm_file, sizeof (char), pcm_size, fp);
  63.     fclose (fp);
  64.  
  65.  
  66.     if (ZmKeepCheck () < 0) {
  67.         printf ("ZMUSIC が常駐していません\n");
  68.         return (-1);
  69.     }
  70.     ZmInit ();        /* ZMUSIC 初期化 */
  71.     ZmPlay (zmd_file, zmd_size);    /* .ZMD を演奏する */
  72.  
  73.     printf ("ジョイスティックの [A] ボタンを押すと効果音を再生します\n"
  74.         "[B] ボタンで終了します\n");
  75.  
  76.     for (;;) {
  77.         int j;        /* ジョイスティックの入力 */
  78.  
  79.         j = _iocs_joyget (0);    /* ジョイスティック0番 */
  80.  
  81.         /* [A] ボタンが押されたか? */
  82.         if ((j & 0b00100000) == 0) {
  83.             ZmAdpcmSE (pcm_file, pcm_size, 4 * 256 + 3, 0);        /* 効果音再生 */
  84.             /* [A] ボタンが離されるのを待つ */
  85.             while ((_iocs_joyget (0) & 0b00100000) == 0);
  86.         }
  87.         /*
  88.            ZmAdpcmSE() の引き数
  89.            ADPCM データへのポインタ,
  90.            ADPCM データのサイズ,
  91.            周波数*256+PAN,
  92.            優先順位
  93.          */
  94.  
  95.         /* [B] ボタンが押されたか? */
  96.         if ((j & 0b1000000) == 0)
  97.             break;
  98.     }
  99.  
  100.     ZmStop ();        /* 音楽停止 */
  101.  
  102.     free (zmd_file);
  103.     free (pcm_file);
  104.  
  105.     return (0);
  106. }
  107.